<?php
App::uses('AppController', 'Controller');
/**
 * Users Controller
 *
 * @property User $User
 */
class UsersController extends AppController {

	var $minicursos = array('Nenhum', 'MC1 - Modelos de Regressão para dados incompletos ou censurados',
							'MC2 - Modelos não Lineares Assimétricos');
	
	
	public $components = array(
			'Upload'=>array(
				'size'=>10000000,
				//'type'=>array('text/xml', 'text/x-sql'),
				'diretorio'=>COMPROVANTE_PATH_COMPLETE
		));

	
	public function beforeFilter(){
		parent::beforeFilter();
		$this->Auth->allow('add');
		$this->Auth->allow('confirmacao');
	}
	

	// Lista de Usuários comuns
	public function index() {
		if($this->isAdmin()){
			$this->User->recursive = -1;
			$this->set('users', $this->paginate(array('User.user_type'=>2)));
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}
	
	// Lista de Usuários comuns pagos
	public function index_pagos() {
		if($this->isAdmin()){
			$this->User->recursive = -1;
			$this->set('users', $this->paginate(array('User.user_type'=>2, 'User.pago'=>1)));
			$this->render('index');
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}
	
	// Lista de Admins
	public function index_admins() {
		if($this->isAdmin()){
			$this->User->recursive = -1;
			$this->set('users', $this->paginate(array('User.user_type'=>0)));
			$this->render('index');
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}
	
	// Lista de Usuários comuns Não Pagos
	public function index_nao_pagos() {
		if($this->isAdmin()){
			$this->User->recursive = -1;
			$this->set('users', $this->paginate(array('User.user_type'=>2, 'User.pago'=>0)));
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}
	
	// Lista de Usuários revisores
	public function index_revisores() {
		if($this->isAdmin()){
			$this->User->recursive = 2;
			$this->set('users', $this->paginate(array('User.user_type'=>1)));
			$this->render('index');
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}
	
	public function trocar_senha($id){
		if($this->isAdmin()){
			$this->User->id = $id;
			if (!$this->User->exists()) {
				throw new NotFoundException(__('Usuário Inválido'));
			}
			if ($this->request->is('post')){
				if($this->User->save($this->request->data)){
					$this->Session->setFlash('Senha alterada com sucesso');
					$this->redirect('index');
				}
				else{
					$this->Session->setFlash('Erro ao alterar senha');
				}
			}
			$user = $this->User->read(null, $id);
			$this->set('user', $user);
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}
	
	public function pagar($id){
		if($this->isAdmin()){
			$this->User->id = $id;
			if (!$this->User->exists()) {
				throw new NotFoundException(__('Usuário Inválido'));
			}
			$pago['User']['id'] = $id;
			$pago['User']['pago'] = 1;
			if($this->User->save($pago)) $this->Session->setFlash('Usuário foi marcado como pago');
			else $this->Session->flash('Erro ao processar. Por favor tente novamente');
			$this->redirect('index_nao_pagos');
				
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}

/**
 * view method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function view($id = null) {
		if($this->isAdmin()){
			$this->User->id = $id;
			if (!$this->User->exists()) {
				throw new NotFoundException(__('Usuário Inválido'));
			}
			$this->set('user', $this->User->read(null, $id));
		}
		else if($this->usuarioAtual['id'] === $id){
			$this->set('user', $this->User->read(null, $id));
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
		$this->set('minicursos', $this->minicursos);
	}

/**
 * add method
 *
 * @return void
 */
	public function add() {
		
		if($this->Session->check('user')){
			$this->request->data = $this->Session->read('user');
			$this->Session->delete('user');
			$this->request->data['User']['password'] = '';
			$this->request->data['User']['pass_confirm'] = '';
		}
		
		if(!$this->logado){
			if ($this->request->is('post')) {
				$this->User->create();
				
				$user = $this->request->data;
				$this->User->set($user);
				if ($this->User->saveAll($user, array('validate' => 'only'))) {
					$user = $this->calcula_valor_total($user);
					$this->Session->write('user', $user);
					$this->redirect('confirmacao');
					//$this->User->saveAll($user, array('validate' => false));
					//$this->Session->setFlash(__('Cadastro realizado com sucesso'));
					//$this->Session->setFlash(__('Cadastro realizado com sucesso<br>'.'Valor total R$'.$user['User']['valor_total'].',00'));
					//$this->redirect('/');
				} else {
					$this->Session->setFlash(__('Cadastro NÃO efetuado, verifique o formulário !'));
					$this->request->data['User']['password'] = '';
					$this->request->data['User']['pass_confirm'] = '';
					//pr($this->request->data);
				}
			}
		}
		else{
			$this->Session->setFlash(__('Usuario ja está logado !'));
			$this->redirect('user_area');
			
		}
		//$enderecos = $this->User->Endereco->find('list');
		//$this->set(compact('enderecos'));
		$this->set('minicursos', $this->minicursos);
	}
	
	/**
	 * confirmacao - mostra ao usuario os dados e pede pra confirmar
	 */
	public function confirmacao(){
		$this->User->create();
		if(!$this->Session->check('user')){
			$this->redirect('/');
		}
		$user = $this->Session->read('user');
		$this->set('user', $user);
		$this->set('minicursos', $this->minicursos);
		
		if ($this->request->is('post')) {
			$this->User->saveAll($user, array('validate' => false));
			$this->Session->delete('user');
			$this->Session->setFlash(__('Cadastro realizado com sucesso<br>'.'Valor total R$'.$user['User']['valor_total'].',00'));
			$this->redirect('/');
		}
		
	}
	
	/**
	 * calcula_valor_total - calcula o valor da inscricao
	 * @param unknown_type $user
	 */
	
	private function calcula_valor_total($user){
		
		$hoje_unix = strtotime(date('d-m-Y'));
		$valor_total = 0;
		//$hoje_unix = strtotime('01-10-2012');
		$cronograma_unix = array_map('strtotime', array('01-10-2012', '12-11-2012', '11-01-2013'));
		
		if($user['User']['minicurso'] == 1){
			$valor_total += 30;
			if($user['User']['material_curso_2']){
				$valor_total += 30;
			}
		}
		
		if($user['User']['minicurso'] == 2){
			$valor_total += 30;
			if($user['User']['material_curso_1']){
				$valor_total += 30;
			}
		}
		
		if($user['User']['minicurso'] == 0){
			if($user['User']['material_curso_1']){
				$valor_total += 30;
			}
			if($user['User']['material_curso_2']){
				$valor_total += 30;
			}
			
		}
		
		//lote 1
		if($hoje_unix >= $cronograma_unix['0'] && $hoje_unix <= $cronograma_unix['1'] ){
			//pr('lote 1');
			if($user['User']['estudante']){
				//pr('estudante');
				if($user['User']['socio']){
					//pr('estudante socio');
					$valor_total += 125;
				}
				else{
					//pr('estudante não socio');
					$valor_total += 175;
				}
			}
			else{
				//pr('pro');
				if($user['User']['socio']){
					//pr('pro socio');
					$valor_total += 250;
				}
				else{
					//pr('pro não socio');
					$valor_total += 350;
				}
			}
			
		}
		else if($hoje_unix > $cronograma_unix['1'] && $hoje_unix <= $cronograma_unix['2'] ){
			//pr('lote 2');
			if($user['User']['estudante']){
				//pr('estudante');
				if($user['User']['socio']){
					//pr('estudante socio');
					$valor_total += 160;
				}
				else{
					//pr('estudante não socio');
					$valor_total += 210;
				}
			}
			else{
				//pr('pro');
				if($user['User']['socio']){
					//pr('pro socio');
					$valor_total += 320;
				}
				else{
					//pr('pro não socio');
					$valor_total += 420;
				}
			}
		}
		else if($hoje_unix > $cronograma_unix['2'] ){
			//pr('lote 3');
			if($user['User']['estudante']){
				//pr('estudante');
				if($user['User']['socio']){
					//pr('estudante socio');
					$valor_total += 200;
				}
				else{
					//pr('estudante não socio');
					$valor_total += 250;
				}
			}
			else{
				//pr('pro');
				if($user['User']['socio']){
					//pr('pro socio');
					$valor_total += 400;
				}
				else{
					//pr('pro não socio');
					$valor_total += 500;
				}
			}
		}
		else {
			$this->Session->setFlash(__('A data ta doida !'));
			$this->redirect('/');
		}
		
		$user['User']['valor_total'] = $valor_total;
		return $user;
	}

	/**
	 * add_revisor method
	 *
	 * @return void
	 */
	public function add_revisor() {
		if($this->isAdmin()){
			if ($this->request->is('post')) {
				$this->User->create();
				$user = $this->add_revisor_fill_form($this->request->data);
				if ($this->User->saveAll($user)) {
					$this->Session->setFlash(__('O Revisor foi cadastrado com sucesso.'));
					$this->redirect('/');
				} else {
					$this->Session->setFlash(__('O Revisor não pôde ser salvo !'));
					$this->request->data['User']['password'] = '';
					$this->request->data['User']['pass_confirm'] = '';
					//pr($this->request->data);
				}
			}
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
		//$enderecos = $this->User->Endereco->find('list');
		//$this->set(compact('enderecos'));
		//$this->set('minicursos', $this->minicursos);
	}
	
	private function add_revisor_fill_form($user_data){
		$user_data['User']['user_type'] = 1;
		$user_data['User']['documento'] = 'none';
		$user_data['User']['nome_cracha'] = 'none';
		$user_data['User']['instituicao'] = 'none';
		$user_data['User']['cargo'] = 'none';
		$user_data['User']['telefone'] = 'none';
		
		
		return $user_data;
				
	}
	
	
/**
 * edit method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function edit($id = null) {
		if($this->isAdmin()){
			$this->User->id = $id;
			if (!$this->User->exists()) {
				throw new NotFoundException(__('Invalid user'));
			}
			if ($this->request->is('post')) {
				if ($this->User->save($this->request->data)) {
					$this->Session->setFlash(__('O usuario foi salvo'));
					$this->redirect(array('action' => 'index'));
				} else {
					$this->Session->setFlash(__('O usuário não pôde ser salvo !'));
				}
				
				//nao modifica a senha do usuario.
			} else if ($this->request->is('put')) {
				$user = $this->request->data;
				unset($user['User']['password']);
				if ($this->User->save($user)) {
					$this->Session->setFlash(__('O usuario foi modificado'));
					$this->redirect(array('action' => 'index'));
				} else {
					$this->Session->setFlash(__('O usuário não pôde ser modificado !'));
				}
			} 
			else {
				$this->request->data = $this->User->read(null, $id);
			}
			
			$enderecos = $this->User->Endereco->find('list');
			$this->set(compact('enderecos'));
			
			$trabalhos = $this->User->Trabalho->find('list');
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
		$this->set(compact('trabalhos'));
	}

/**
 * delete method
 *
 * @throws MethodNotAllowedException
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function delete($id = null) {
		if($this->isAdmin()){
			if (!$this->request->is('post')) {
				throw new MethodNotAllowedException();
			}
			$this->User->id = $id;
			if (!$this->User->exists()) {
				throw new NotFoundException(__('Invalid user'));
			}
			if ($this->User->delete()) {
				$this->Session->setFlash(__('User deleted'));
				$this->redirect(array('action' => 'index'));
			}
			$this->Session->setFlash(__('User was not deleted'));
			$this->redirect(array('action' => 'index'));
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
		
	}
	
/**
 * login method
 *
 * 
 * 
 * 
 * @return void
 */
	public function login() {
		if ($this->request->is('post')) {
			$this->request->data['User'] = $this->request->data;
			if ($this->Auth->login()) {
				$usuario = $this->Auth->user();
				 if($usuario['user_type'] == 0)
					return $this->redirect(array('controller'=>'users', 'action'=>'admin_area'));
				 elseif ($usuario['user_type'] == 1){
				 	return $this->redirect(array('controller'=>'users', 'action'=>'revisor_area'));
				 } 
				 elseif ($usuario['user_type'] == 2){
				 	return $this->redirect(array('controller'=>'users', 'action'=>'user_area'));
				 }
				 else
					return $this->redirect($this->logout());
			} 
			else {
				$this->Session->setFlash("Erro de autenticação!", 'default', array(), 'auth');
			}
		}
		$this->redirect('/');
		//$this->Session->setFlash("Nao é possivel logar no momento!", 'default', array(), 'auth');
	}
	
/**
 * user_area
 *
 * @return void
 */
	public function user_area(){
		if(!$this->isUser()){
			$this->Session->setFlash(__('Area exclusiva para usuários comuns !'));
			$this->redirect('/');
		}
	}
	 
/**
 * revisor_area
 *
 * @return void
 */
	public function revisor_area(){
		if(!$this->isRevisor()){
			$this->Session->setFlash(__('Area exclusiva para revisores !'));
			$this->redirect('/');
		}
		// TODO Será que é só isso nessa página!?
		$this->redirect('/trabalhos/index_revisor');
	}
	
/**
 * admin_area
 *
 * @return void
 */
	public function admin_area(){
		if(!$this->isAdmin()){
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}
	
/**
 * logout method
 *
 * @return void
 */
	public function logout(){
		$this->redirect($this->Auth->logout());
	}
	
	public function enviar_comprovante(){
		if($this->isUser()){
			if ($this->request->is('post') || $this->request->is('put')) {
				$this->request->data = $this->request->data['User'];
				$user = $this->User->findById($this->usuarioAtual['id']);
				if(!empty($user['User']['comprovante'])){
					$this->Session->setFlash('Você já enviou um comprovante. Entre em contato com a administração para alterar');
					$this->redirect('user_area');
				}
				if($this->Upload->validar($this->request->data['comprovante'])){
					if($this->Upload->armazenar($this->usuarioAtual['username'], $this->request->data['comprovante'])){
						$this->request->data['comprovante'] = 
							COMPROVANTE_PATH_SHORT.DS.$this->usuarioAtual['username'].DS.$this->request->data['comprovante']['name'];
						$this->request->data['id'] = $this->usuarioAtual['id'];
						if ($this->User->save($this->request->data)) {
							$this->Session->setFlash(__('O comprovante foi enviado com sucesso'));
							$this->redirect(array('action' => 'user_area'));
						} else { // Não salvou
							$this->Session->setFlash(__('O commprovante não foi salvo. Por favor, tente novamente!'));
						}
					}else{ // Não armazenou o arquivo
						$this->Session->setFlash(__('O comprovante não foi armazenado. Por favor, tente novamente!'));
					}
				}else{ // Não validou o arquivo
					// TODO Arrumar para aparecer um erro melhor
					$this->Session->setFlash(__('O comprovante não foi validado. Por favor, tente novamente!'));
				}
			}
		}
		else{
			$this->Session->setFlash('Área exclusiva para usuários comuns');
			$this->redirect('/');
		}
	}
	
	public function vira_revisor($id){
		if($this->isAdmin()){
			$this->User->id = $id;
			if($this->User->saveField('user_type', 1))
				$this->Session->setFlash('Usuário marcado como revisor');
			else $this->Session->setFlash('Erro ao salvar!');
		}
		$this->redirect('index');
	}
	
}

